Since the introduction of programmable computers, attempts have been made to improve the software development process using various methodological approaches (e.g., pair programming, object-oriented design, etc.) and technological aids (e.g., compilers, debuggers, etc.).
One methodology of interest is “code reuse,” whereby programmers are encouraged to use existing software in the development of new software. While code reuse has been extant since the beginning of software development, with programmers reusing their own personally-developed software, it has taken on particular importance in light of the emergence of the “open source” software movement.
Over the past two decades, the open source software movement has made high-quality software, ranging from applications to libraries to entire operating systems, available in source code form to third party developers. Through code reuse, programmers can utilize this open source software to reduce the time and resources needed to develop new software. These programmers can, in turn, provide this new software as open source software, facilitating further development and improvement by other programmers.
Like commercial software, open source software is distributed and used subject to the terms of a software license, which is typically a contract between the licensor and the licensee of the software governing the licensee's use of the software. Unlike commercial software licenses, however, the terms of an open source software license typically allow the licensee to reuse, redistribute, and relicense the licensed source code and derivative works thereof. Some open source software licenses also contain prohibitions against the imposition of additional license terms that conflict with the terms of the open source license.
When one or more software packages licensed under different terms are used together to develop new software, it is possible that the terms of the licenses governing the combination of the packages may conflict, preventing the programmer from distributing the new software in compliance with all of the applicable software licenses. These problems may arise whether the software packages are open source software or proprietary software packages.
Programmers can attempt to identify and avoid these license conflicts with their personal knowledge of the software that they are using. However, in sizeable software projects, it may not be possible for any one programmer to know all of the software packages used in a particular project and all of the associated license terms. Moreover, if any one programmer incorporates additional software, either intentionally or by accident, without advising the developers managing the product, the result may be a license conflict that is not identified until the new software has already been shipped.
Similar issues arise with web services and other sources of information that can be incorporated into a software project in the same fashion as a software component. For example, software projects using information feeds from Google Earth or real-time stock price data from Yahoo! Finance must also comply with the contractual terms associated with the use of those services and their information, and avoid any conflicts between those contractual terms and any other contractual terms or license terms associated with the software project.
Accordingly, there is a need for methods and systems for managing software development that address the shortcomings of the prior art, track materials, services and software packages used in software development, and identify potential license, contractual, and other conflicts resulting from such use.